home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 34.zip
/
BS1 part 34
/
GFA basic training.adf
/
Copper
/
COPPER_CYCLE_ASS.LST
< prev
next >
Wrap
File List
|
1989-06-01
|
4KB
|
162 lines
' User-Copper II mit IRQ-Assembler Teil
'
@irqposition
@usercop_lÄnge
@memory_copperbereit
@user_copper_an
'
@irq_an
REPEAT
UNTIL MOUSEK=3
@irq_aus
'
@user_copper_aus
EDIT
'
> PROCEDURE datas
DATA $0180,$0000
DATA $7701,$fffe
DATA $0180,$0f00
DATA $7801,$fffe
DATA $0180,$0f10
DATA $7901,$fffe
DATA $0180,$0f20
DATA $7a01,$fffe
DATA $0180,$0f40
DATA $7b01,$fffe
DATA $0180,$0f60
DATA $7c01,$fffe
DATA $0180,$0f70
DATA $7d01,$fffe
DATA $0180,$0f80
DATA $7e01,$fffe
DATA $0180,$0f90
DATA $7f01,$fffe
DATA $0180,$0fa0
DATA $8001,$fffe
DATA $0180,$0fb0
DATA $8101,$fffe
DATA $0180,$0fc0
DATA $8201,$fffe
DATA $0180,$0fd0
DATA $8301,$fffe
DATA $0180,$0fe0
DATA $8401,$fffe
DATA $0180,$0ff0
DATA $8501,$fffe
DATA $0180,$0ff1
DATA $8601,$fffe
DATA $0180,$0ff2
DATA $8701,$fffe
DATA $0180,$0ff3
DATA $8801,$fffe
DATA $0180,$0ff4
DATA $8901,$fffe
DATA $0180,$0ff5
DATA $8a01,$fffe
DATA $0180,$0ef5
DATA $8b01,$fffe
DATA $0180,$0df5
DATA $8c01,$fffe
DATA $0180,$0cf5
DATA $8d01,$fffe
DATA $0180,$0bf4
DATA $8e01,$fffe
DATA $0180,$0af3
DATA $8f01,$fffe
DATA $0180,$09f2
DATA $9001,$fffe
DATA $0180,$08f1
DATA $9101,$fffe
DATA $0180,$07f2
DATA $9201,$fffe
DATA $0180,$06e3
DATA $9301,$fffe
DATA $0180,$06d3
DATA $9401,$fffe
DATA $0180,$06c3
DATA $9501,$fffe
DATA $0180,$06b3
DATA $9601,$fffe
DATA $0180,$06a3
DATA $9801,$fffe
DATA $0180,$0693
DATA $9901,$fffe
DATA $0180,$0683
DATA $9a01,$fffe
DATA $0180,$0673
DATA $9b01,$fffe
DATA $0180,$0664
DATA $9c01,$fffe
DATA $0180,$0655
DATA $9d01,$fffe
DATA $0180,$0555
DATA $9e01,$fffe
DATA $0180,$0546
DATA $9f01,$fffe
DATA $0180,$0
DATA $ffff
RETURN
> PROCEDURE usercop_lÄnge
DO
READ x%
EXIT IF x%=&HFFFF
INC anz% ! Anzahl Worte
LOOP
MUL anz%,2 ! Anzahl Bytes
' Für die Maschinenroutine brauchen wir die Anzahl der Farbwerte
lÄnge%=SHR(anz%,3) ! Anzahl Farbwerte für IRQ (=DIV anz%/8)
RESTORE
RETURN
> PROCEDURE memory_copperbereit
altcop%=LPEEK(_GfxBase+50) ! Copper-Auto-Vector relativ zu GFXBASE retten
mem%=76+anz%
u_copadr%=MALLOC(mem%,2)
neu_copadr%=u_copadr%
startcop%=altcop%+84
' Startliste des Systems Kopieren
BMOVE startcop%,neu_copadr%,60
' Unsere Liste initialisieren
CLR zeiger&,x%
RESTORE
' Unseren Adress-Zeiger erhöhen
ADD neu_copadr%,60
DO
READ x%
EXIT IF x%=&HFFFF
DPOKE neu_copadr%+zeiger&,x%
ADD zeiger&,2
LOOP
' End Liste des Systems Kopieren
ADD startcop%,60
ADD neu_copadr%,anz%
BMOVE startcop%,neu_copadr%,16
RETURN
> PROCEDURE user_copper_an
VSYNC
LONG{_GfxBase+50}=u_copadr%
RETURN
> PROCEDURE user_copper_aus
VSYNC
LONG{_GfxBase+50}=altcop% ! Alten Vector zurück
x%=MFREE(u_copadr%,mem%)
RETURN
> PROCEDURE irqposition
INLINE irq%,66
RETURN
> PROCEDURE irq_an
altirq%=LPEEK(108) ! Alten IRQ-Vector lesen
DPOKE &HDFF09A,&H4000 ! Alle IRQs Stoppen (Master-IRQ aus)
LONG{irq%+18}=u_copadr%+70 ! Position 1.Farbe der Copperliste schreiben
LONG{irq%+24}=u_copadr%+78 ! Position nächste Farbe schreiben
LONG{irq%+32}=lÄnge%-4 ! Anzahl der Farbwerte in der Copperliste
LONG{irq%+62}=altirq% ! Jump-Adresse zum System schreiben
LONG{108}=irq% ! Neuen (unseren) IRQ-Vector schreiben
DPOKE &HDFF09A,&HC000 ! IRQs wieder zulassen.. (Start)
RETURN
> PROCEDURE irq_aus
DPOKE &HDFF09A,&H4000 ! IRQs stoppen
LONG{108}=altirq% ! System-Vector wieder herstellen
DPOKE &HDFF09A,&HC000 ! IRQs starten
RETURN